home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / rsc2obj.lzh / LIESMICH next >
Encoding:
Text File  |  1992-05-27  |  5.2 KB  |  141 lines

  1. RSC2OBJ: (Keine externen Resourcefiles mehr)
  2. """"""""
  3.  
  4. RSC2OBJ erzeugt ein DRI kompatibles Objektformat zum hinzulinken in ihr Programm.
  5.     Aufruf: 'rsc2obj <rsc-file>.RSC <obj-file>.O LABEL -r
  6. <rsc-file>.RSC : Eigabefile (Resorcefile).
  7. <rsc-file>.O   : Ausgabefile (Objektcode).
  8. LABEL          : Der Name(Bezeichner) über den auf die Resource zu-
  9.                  gegriffen werden kann. Deklaration in C:
  10.                  extern RSHDR LABEL;
  11.                  (RSHDR ist in aes.h definiert).
  12. -r             : [Optional] prüft nach Möglichkeit, ob die Quelldatei
  13.                  wirklich ein Resourcefile ist und reloziert die Baum-
  14.                  Adressen, die Zeiger auf die free_images, free_strings,
  15.                  tedinfo-Strukturen, ...
  16.                  Notwendig für die Verwendung der beliegenden Module.
  17.  
  18.  
  19. Library-Funktionen:
  20. """""""""""""""""""
  21.  
  22. int rsrc_shdr   ( RSHDR *rsheader );
  23. int rsrc_ghdr   ( RSHDR **rsheader );
  24. int rsrc_sobject( RSHDR *rsc, int re_gtype, int re_gindex, void *gaddr );
  25. int rsrc_gobject( RSHDR *rsc, int re_gtype, int re_gindex, void **gaddr );
  26.  
  27.  
  28. rsrc_shdr (ReSoRCe_SetHeaDeR):
  29. ------------------------------
  30.  Führt auf alle Objekte der Resource, die durch den ResourceHeader (rsheader)
  31.  identifiziert wird, ein 'rsrc_obfix()' durch und trägt den Zeiger auf die
  32.  Resource in das 'global'-Array ([5,6] = ap_ptree) ein. Somit liegt die selbe
  33.  Situation vor, als wenn die Resource mittels 'rsrc_load()' geladen worden
  34.  wäre. Zusätzlich wird in global[7,8] der Zeiger auf den ResourceHeader und
  35.  in global[9] die Länge der Resource eingetragen.
  36.  
  37.   RSHDR   *rsheader   : Zeiger auf den ResourceHeader der eingebundenen
  38.                         Resource.
  39.   <Rückgabewert>      : 0 - im Fehlerfall
  40.                         1 - OK
  41.  
  42.  
  43. rsrc_ghdr (ReSoRCe_GetHeaDeR):
  44. ------------------------------
  45.  Ließt den ResouceHeader wieder aus dem 'global'-Array aus.
  46.  
  47.   RSHDR  **rsheader   : Adresse des Zeiger, in dem der Zeiger auf den
  48.                         ResourceHeader zurückgegeben werden soll.
  49.   <Rückgabewert>      : 0 - im Fehlerfall
  50.                         1 - OK
  51.  
  52.  
  53. rsrc_sobj (ReSoRCe_SetOBJect):
  54. ------------------------------
  55.  Diese Funktion ist vergleichbar mit der Funktion 'rsrc_saddr()', nur das sie
  56.  auf Basis eines RSHDR arbeitet und die offiziell dokumentierten Werte setzt
  57.  im Gegensatz zu der Orginalfunktion des Betriebssystems. Allerdings ist für
  58.  die folgenden Typen das Resultat identisch (bei den anderen "Objekten"
  59.  setzt die AES-Funktion mitunter äußerst merkwürdige Werte):
  60.                 0       Objektbaum
  61.                 15      ad_frstr
  62.                 16      ad_frimg
  63.  
  64.   RSHDR   *rsc        : Zeiger auf den ResourceHeader der eingebundenen
  65.                         Resource.
  66.   int      re_gtype   : Objekttyp der gesetzt werden soll (vgl. rsrc_saddr())
  67.   int      re_gindex  : Index des Objektes
  68.   void    *gaddr      : Wert der gesetzt werden soll.
  69.   <Rückgabewert>      : 0 - im Fehlerfall
  70.                         1 - OK
  71.  
  72.  
  73. rsrc_gobj (ReSoRCe_GetOBJect):
  74. ------------------------------
  75.  Diese Funktion ist das Gegenstück zu rsrc_sobj und entspricht im wesentlichen
  76.  der Funktion rsrc_gaddr() des AES. Auch hier gilt das oben gesagte!
  77.  Bei den folgenden Typen das Resultat identisch mit rsrc_gaddr (bei den
  78.  anderen "Objekten" liefert die AES-Funktion mitunter äußerst merkwürdige
  79.  Werte):
  80.                 0       Objektbaum
  81.                 15      ad_frstr
  82.                 16      ad_frimg
  83.  
  84.   RSHDR   *rsc        : Zeiger auf den ResourceHeader der eingebundenen
  85.                         Resource.
  86.   int      re_gtype   : Objekttyp der gelesen werden soll (vgl. rsrc_gaddr())
  87.   int      re_gindex  : Index des Objektes
  88.   void   **gaddr      : Ausgelesener Wert
  89.   <Rückgabewert>      : 0 - im Fehlerfall
  90.                         1 - OK
  91.  
  92.  
  93.  
  94. ===========================================================================
  95.  
  96. Ein Stück C-Programm:
  97. ---------------------
  98.  
  99.   extern RSHDR    GEM_VIEW;
  100.   :
  101.   :
  102.   rsrc_shdr (&GEM_VIEW); /* Hier werden die rsrc_obfix() durchgeführt */
  103.   if (_app) {
  104.     rsrc_gaddr(R_TREE, GVIEWMNU, &menu);
  105.     :
  106.     :
  107.     menu_bar(menu, 1);
  108.   }
  109.  
  110. ---------------------
  111. ODER
  112. ---------------------
  113.  
  114.   #define IMGICON  0   /* Formular/Dialog */
  115.   extern RSHDR  ICON_IMG;
  116.   :
  117.   :
  118.   {
  119.     OBJECT *object;
  120.     int     i;
  121.     object = *((OBJECT**)(ICON_IMG.rsh_trindex + (long)&ICON_IMG));
  122.       for (i = 0; i < ICON_IMG.rsh_nobs; i++)
  123. #if CONSTANT
  124.       {
  125.         /* Für die ICONS (alles) in Pixel umrechnen nach HIGH_RES! */
  126.         object[i].ob_x      =  8 * (object[i].ob_x      & 0x00FF) + ((object[i].ob_x      >> 8) & 0x00FF);
  127.         object[i].ob_y      = 16 * (object[i].ob_y      & 0x00FF) + ((object[i].ob_y      >> 8) & 0x00FF);
  128.         object[i].ob_width  =  8 * (object[i].ob_width  & 0x00FF) + ((object[i].ob_width  >> 8) & 0x00FF);
  129.         object[i].ob_height = 16 * (object[i].ob_height & 0x00FF) + ((object[i].ob_height >> 8) & 0x00FF);
  130.       }
  131. #else
  132.       rsrc_obfix(object, i);
  133. #endif
  134.   }
  135.   rsrc_gobject(&ICON_IMG, R_TREE, IMGICON, (void**) &iconTree);
  136.  
  137. ---------------------
  138. Also kein Problem, auch nicht bei mehreren Resourcefiles (s. GEMVIEW)
  139.  
  140.  
  141.     Dieter